import axios from 'axios'
import store from '../store'
import { refreshTokenAPI } from '@/api'
import router from '../router'
const ajax = axios.create({
  baseURL: 'http://123.57.109.30:8000'
})
// 添加请求拦截器
ajax.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  if (config.headers.Authorization === undefined && store.state.token.length > 0) {
    config.headers.Authorization = 'Bearer ' + store.state.token
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
ajax.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response
}, async function (error) {
  // 对响应错误做点什么
  if (error.request.status === 401) {
    // 清空vuex和本地的token值
    store.commit('getToken', '')
    // localStorage.setItem('token', '')
    // 调用接口,获取刷新后的token值
    const res = await refreshTokenAPI()
    // console.log(res)
    // 把最新的token赋值给vuex中的token
    store.commit('getToken', res.data.data.token)
    // 把最新的token赋值给未完成请求的请求头中
    error.config.headers.Authorization = 'Bearer ' + res.data.data.token
    // 把未完成的请求继续执行下去
    return ajax(error.config)
  } else if (error.message === 'refresh_token失效') {
    store.commit('getToken', '')
    store.commit('getRefreshToken', '')
    // 跳转到 登录页面
    router.replace({
      path: '/login'
    })
  }
  return Promise.reject(error)
})
// 封装请求接口并导出
export default ({ url, method = 'GET', data, params, headers }) => {
  return ajax({
    url,
    method,
    data,
    params,
    headers
  })
}
